// 导入 get 请求方法
import {getRequest} from "./api";

function fmtRoutesFun(routes) {
    //格式化的结果
    let fmtRoutes = [];
    routes.forEach(route => {
        //批量的变量定义
        let {
            path,
            name,
            component,
            children,
            iconCls
        } = route;
        if (children && children instanceof Array) {
            //说明这个 children 是一级菜单的 children
            //通过递归格式化 children
            children = fmtRoutesFun(children);
        }
        let fmtRoute = {
            path: path,
            name: name,
            children: children,
            iconCls: iconCls,
            component(resolve) {
                if (component.startsWith("Home")) {
                    //这个就是动态加载组件
                    require(['../views/' + component + '.vue'], resolve);
                } else if (component.startsWith("Emp")) {
                    require(['../views/emp/' + component + '.vue'], resolve);
                } else if (component.startsWith("Per")) {
                    require(['../views/per/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sal")) {
                    require(['../views/sal/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sta")) {
                    require(['../views/sta/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sys")) {
                    require(['../views/sys/' + component + '.vue'], resolve);
                }
            }
        }
        fmtRoutes.push(fmtRoute);
    })
    return fmtRoutes;
}

//初始化菜单的方法
export const initMenu = (router, store) => {

    //先去判断 vuex 中的 menus 是否有数据
    //用户正常在页面上操作，menus 都是有数据的，只有当用户点击了浏览器刷新按钮，那么 Vuex 中的所有数据都会丢失
    //menus这个用什么名字,根据store里的state里的变量命名,我们这里为 state:{ menus:[]}
    if (store.state.menus.length > 0) {
        //说明此时是正常的页面跳转，既不是刚登录成功，也不是按浏览器刷新按钮
        return;
    }
    getRequest("/menu").then(menuData => {
        if (menuData) {
            //格式化菜单数据，主要是将 Component 的值由字符串转为 对象
            let fmtRoutes = fmtRoutesFun(menuData);
            //将格式化的数据存入 router 中，跳转会用到
            router.addRoutes(fmtRoutes);
            //将格式化的数据存入 store 中，渲染菜单会用到
            store.commit('INIT_MENUS', fmtRoutes);
        }
    })
}
